import json
import os
import time
from functools import wraps

# 用户数据文件夹
DB_DIR = os.path.join(
    os.path.dirname(os.path.dirname(__file__)),
    'db'
)


def save(user_dict):
    """
    保存用户数据
    :param user_dict: 用户字典
    :return: None
    """
    username = user_dict['username']
    user_file = os.path.join(DB_DIR, f'{username}.json')

    with open(user_file, 'w', encoding='utf8') as f:
        f.write(json.dumps(user_dict))


def read(username):
    """
    读取用户数据
    :param username: 用户名
    :return: 用户字典
    """
    user_file = os.path.join(DB_DIR, f'{username}.json')
    with open(user_file, 'r', encoding='utf8') as f:
        return json.loads(f.read())


def is_user_exist(username):
    """
    用户是否存在
    :param username: 用户名
    :return: 布尔值
    """
    user_file_path = os.path.join(DB_DIR, f'{username}.json')
    return os.path.exists(user_file_path)


def get_user_list(user_file_list):
    """
    获取用户名列表
    :param user_file_list: 用户文件名列表
    :return: 用户名列表
    """
    return list(map(lambda s: s.split('.json')[0], user_file_list))


def time_statistics(func):
    """函数运行时间统计"""

    @wraps(func)
    def inner(*args, **kwargs):
        start_time = time.time()
        res = func(*args, **kwargs)
        end_time = time.time()
        print('当前功能执行时间为 %s 秒)' % (end_time - start_time))
        return res

    return inner
